def find_disappeared_numbers(nums):
    """
    问题：在长度为n的数组中，找出1..n中未出现的数字（空间O(1)）
    思路：用原数组作哈希表，将出现的数字对应索引标记为负数
    """
    n = len(nums)
    for num in nums:
        # 取绝对值（避免已标记的负数影响），映射到索引（num-1）
        index = abs(num) - 1
        # 将对应位置标记为负数，表示该数字已出现
        if nums[index] > 0:
            nums[index] = -nums[index]

    # 收集未被标记的索引（即未出现的数字）
    return [i + 1 for i in range(n) if nums[i] > 0]


# 测试
print(find_disappeared_numbers([4, 3, 2, 7, 8, 2, 3, 1]))  # 输出：[5,6]